Amazon Pollyで使えるSSMLまとめ #reinvent
はじめに
AWS re:Invent 2016で発表されたAI三兄弟。Amazon RekognitionもAmazon Pollyも超楽しいです。毎日触ってます。
今日はAmazon Pollyで使えるSpeech Synthesis Markup Language (SSML)について確認してみました。なおAmazon PollyはSSML Version 1.1に準拠しています。
SSML解説
speak
SSMLのルートとなるタグです。最もシンプルなSSMLはspeakタグで文字列を囲むだけです。
<speak>これはSSMLの例です。</speak>
なお、speakにxml:langを書くことで、読み上げ言語を強制できます。以下の例だとen-USに設定しているため、日本語文書は無視されます。
<speak xml:lang="en-US">これはSSMLの例です。</speak>
lang
langタグで囲んだ文章に対し言語を指定します。上記の例でxml:lang="en-US"を指定した場合は文章内の日本語は無視されましたが、日本語の所だけlangで日本語を指定すれば、全文が読み上げされます。
<speak xml:lang="en-US"><lang xml:lang="ja-JP">これは</lang>SSML<lang xml:lang="ja-JP">の例です。</lang></speak>
sub
subタグで囲んだ文章はaliasで指定された文章に置換されます。
<speak>私たちは<sub alias="くらめそ">Classmethod</sub>です。</speak>
emphasis
emphasisは文章読み上げの強調について設定します。オプションとしてlevelの指定があり、4段階で指定できます。
<speak>普通。 <emphasis level="strong">強い強調。</emphasis> <emphasis level="moderate">ほどほどの強調。</emphasis> <emphasis level="none">強調しない。</emphasis> <emphasis level="reduced">弱い。</emphasis> </speak>
break
breakタグは文章読み上げの韻律の境目、または休止を設定します。オプションとしてstrengthとtimeの指定があります。strengthは韻律の境目の強弱を6段階で指定できます。
<speak> 休止無し。<break strength="none" /> とても弱い。<break strength="x-weak" /> 弱い。<break strength="weak" /> 中間。<break strength="medium" /> 強い。<break strength="strong" /> とても強い。<break strength="x-strong" /> </speak>
timeでは休止を秒(s)またはミリ秒(ms)で設定します。
<speak> 10ミリ秒休止。<break time="10ms" /> 1秒休止。<break time="1s" /> 5秒休止。<break time="5s" /> はい! </speak>
prosody
prosodyタグは音声出力のピッチ、読み上げ速度、音量の設定が出来ます。 ピッチはpitchオプションで設定します。6段階あります。
<speak> <prosody pitch="default">標準。</prosody> <prosody pitch="x-low">とても低い。</prosody> <prosody pitch="low">低い。</prosody> <prosody pitch="medium">中間。</prosody> <prosody pitch="high">高い。</prosody> <prosody pitch="x-high">とても高い。</prosody> </speak>
読み上げ速度はrateオプションで設定します。こちらも6段階あります。
<speak> <prosody rate="default">標準。</prosody> <prosody rate="x-slow">とても遅い。</prosody> <prosody rate="slow">遅い。</prosody> <prosody rate="medium">中間。</prosody> <prosody rate="fast">早い。</prosody> <prosody rate="x-fast">とても早い。</prosody> </speak>
音量はvolumeオプションで設定します。設定は+XXdBか-XXdBといった数値、あるいは用意された7段階です。silentの場合は読み上げされません。
<speak> <prosody volume="default">標準。</prosody> <prosody volume="x-soft">とても小さい。</prosody> <prosody volume="soft">小さい。</prosody> <prosody volume="medium">中間。</prosody> <prosody volume="loud">大きい。</prosody> <prosody volume="x-loud">とても大きい。</prosody> <prosody volume="silent">無音。</prosody> <prosody volume="-10dB">マイナス10デシベル。</prosody> <prosody volume="+10dB">プラス10デシベル。</prosody> </speak>
これらのオプションは組み合わせが可能です。
<speak> <prosody pitch="x-high" rate="x-fast" volume="x-loud"> シルクドソレイユ いつまでそれ言う?<break strength="weak" /> 飲んだら睡眠 そしたら<sub alias="もーにん">Morning!</sub><break strength="weak" /> サーカスを見ずに水かけられたよ<break strength="weak" /> 俺は<sub alias="おーぐり">Oguri</sub>、これにはビックリ<break strength="weak" /> </prosody> </speak>
say-as
タグでは文章に対する情報を記載します。フォーマットを定義するものです。今は日付フォーマットを記載した例です。
<speak> 今日は<say-as interpret-as="date" format="ymd">2016/12/23</say-as>です。 </speak>
まとめ
上記で大体カバーできていると思いますが、不足があれば是非教えてください。結構細かく指定が可能なことがお分かり頂けましたでしょうか。これに加えLexiconsを使えばかなり人間に近い読み上げができるかと思います。